package model

import (
	"blog_server/global"
	"blog_server/pkg"
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql" // _ 表示项目中不直接调用包内方法，只保证包内init函数被执行即可
	"time"
)

/// 公共数据模型文件

type Model struct {
	ID uint32 `json:"id" gorm:"primary_key"` // 主健
	CreatedOn time.Time `json:"created_on"` // 创建人
	CreatedBy string `json:"created_by"` // 创建时间
	ModifiedOn time.Time `json:"modified_on"` // 修改时间
	ModifiedBy string  `json:"modified_by"` // 修改人
	DeletedOn time.Time `json:"deleted_on"` // 删除时间
	IsDel uint `json:"is_del"` // 是否删除 0未删除 1已删除
}

func NewDBEngine(databaseSetting *pkg.DatabaseSettingS) (*gorm.DB, error)  {
	s := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=%s&parseTime=%t&loc=Local",
		databaseSetting.UserName,
		databaseSetting.Password,
		databaseSetting.Host,
		databaseSetting.DBName,
		databaseSetting.Charset,
		databaseSetting.ParseTime,
		)
	// 注意如果参数超过两个会有问题
	db, err := gorm.Open(databaseSetting.DBType, s)
	if err != nil {
		return nil, err
	}
	if global.ServerSetting.RunMode == "debug" {
		db.LogMode(true)
	}
	db.SingularTable(true) // true 让gorm转义struct名字的时候不要加上s
	db.DB().SetMaxIdleConns(databaseSetting.MaxIdleConns)
	db.DB().SetMaxOpenConns(databaseSetting.MaxOpenConns)
	
	return db, err
}

